﻿using Sistema.Dominio;
using Sistema.Util;
using System;
using System.Collections.Generic;
using Sistema.NFe.Xml.Interfaces;

namespace Sistema.NFe
{
    public class NFe
    {
        protected IDAO.INFeInfoDAO _repository;

        public NFe()
        {
            this._repository = DAOFactoryIoC.ObterDaoFactory().GetReference<IDAO.INFeInfoDAO>();
        }

        protected void Salvar(NFeInfo dados)
        {
            this._repository.Salvar(dados);
        }
        protected void Atualizar(NFeInfo dados)
        {
            this._repository.Alterar(dados);
        }

        public IList<NFeInfo> Listar()
        {
            return this._repository.Listar();
        }
        public IList<NFeInfo> Listar(String parametro)
        {
            return this._repository.Listar(parametro);
        }

        public NFeInfo LerDadosNFe(String Xml)
        {
            IXmlNFe DadosXmlNFe = new Xml.XmlFactory().GetNFeReference();
            DadosXmlNFe.Xml = Xml;
            NFeInfo DadosRetorno = new NFeInfo()
            {
                Numero = DadosXmlNFe.Numero.ToString(),
                Serie = DadosXmlNFe.Serie.ToString(),
                Dados = new NFeDadosVO()
                {
                    DestinatarioEmail = DadosXmlNFe.DestinatarioEmail,
                    DestinatarioRazaoSocial = DadosXmlNFe.DestinatarioRazaoSocial,
                    ValorTotal = DadosXmlNFe.ValorTotal.ToString(),
                    NaturezaOperacao = DadosXmlNFe.NaturezaOperacao,
                    Xml = DadosXmlNFe.Xml
                }
            };

            return DadosRetorno;
        }


        public String GerarXmlProcNfe(NFeInfo dados)
        {
            IXmlProcNFe dadosProc = new Xml.XmlFactory().GetProcNFeReference();
            return dadosProc.GeraXml(dados);
        }

        public NFeInfo PesquisaPorNumeroSerie(String numero, String serie)
        {
            return _repository.PesquisaPorNumeroeSerie(serie, numero);
        }

        /*public IList<NFeInfo> PesquisaporData(DateTime dataInicio, DateTime dataFim)
        {
            return _repository.PesquisaPorData(dataInicio, dataFim);
        }*/

    }

    public enum TipoAmbiente
    {
        Producao = 1,
        Homologacao = 2
    }

    public enum cUF
    {
        Rondonia = 11,
        Acre = 12,
        Amazonia = 13,
        Roraima = 14,
        Para = 15,
        Amapa = 16,
        Tocantins = 17,
        Maranhao = 21,
        Piaui = 22,
        Ceara = 23,
        RioGranDoNorte = 24,
        Paraiba = 25,
        Pernambuco = 26,
        Alagoas = 27,
        Sergipe = 28,
        Bahia = 29,
        Minas = 31,
        EspiritoSanto = 32,
        RioDejaneiro = 33,
        SaoPaulo = 34,
        Parana = 41,
        SantaCatarina = 42,
        RioGrandeDoSul = 43,
        MatoGrossoDoSul = 50,
        MatoGrosso = 51,
        Goias = 52,
        DistritoFederal = 53
    }

    public enum WebService
    {
        AM,
        BA,
        CE,
        DPEC,
        GO,
        MG,
        MS,
        MT,
        PE,
        PR,
        RS,
        SCAN,
        SP,
        SVAN,
        SVRS,
    }

    public enum Operacao
    {
        Recepcao,
        RetornoRecepcao,
        Cancelamento,
        Inutilizacao,
        Consulta,
        StatusServico,
        ConsultaCadastro
    }

    public enum Versao
    {
        Versao2SOAP12
    }
}
